package com.lumlord.common.domain;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletResponse;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * @ClassName: Result
 * @Description: TODO(ajax操作消息提醒)
 * @author gpf
 * @date 2018年8月18日
 *
 */
public class Result extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;

	/**
	 * 初始化一个新创建的 Message 对象
	 */
	public Result() {
	}

	/**
	 * 返回错误消息
	 * 
	 * @return 错误消息
	 */
	public static Result error() {
		return error(1, "操作失败");
	}

	/**
	 * 返回错误消息
	 * 
	 * @param code 错误码
	 * @param msg  内容
	 * @return 错误消息
	 */
	public static Result exception(int code, String msg) {
		Result json = new Result();
		json.put("code", code);
		json.put("msg", msg);
		json.put("data", null);
		return json;
	}

	/**
	 * 返回错误消息
	 * 
	 * @param msg 内容
	 * @return 错误消息
	 */
	public static Result error(String msg) {
		return error(500, msg);
	}

	/**
	 * 返回错误消息
	 *
	 * @param msg 内容
	 * @return 错误消息
	 */
	public static Result errorLogin(String msg) {
		return error(401, msg);
	}

	/**
	 * 返回错误消息
	 * 
	 * @param code 错误码
	 * @param msg  内容
	 * @return 错误消息
	 */
	public static Result error(int code, String msg) {
		Result json = new Result();
		json.put("code", code);
		json.put("msg", msg);
		json.put("data", null);
		return json;
	}

	/**
	 * 返回成功消息
	 * 
	 * @param msg 内容
	 * @return 成功消息
	 */
	public static Result success(String msg) {
		Result json = new Result();
		json.put("msg", msg);
		json.put("code", 200);
		json.put("data", null);
		return json;
	}

	/**
	 * 返回成功消息
	 * 
	 * @param msg 内容
	 * @return 成功消息
	 */
	public static Result success(Object data) {
		Result json = new Result();
		json.put("msg", "操作成功！");
		json.put("code", 200);
		json.put("data", data);
		return json;
	}

	/**
	 * 返回成功消息
	 * 
	 * @return 成功消息
	 */
	public static Result success() {
		return Result.success("操作成功");
	}

	public static Result successData(int code, Object value) {
		Result json = new Result();
		json.put("code", code);
		json.put("data", value);
		return json;
	}

	/**
	 * 返回成功消息
	 * 
	 * @param key   键值
	 * @param value 内容
	 * @return 成功消息
	 */
	@Override
	public Result put(String key, Object value) {
		super.put(key, value);
		return this;
	}
	
	public Integer getCode() {
		return Integer.parseInt(this.get("code")+"");
	}
	
	public String getMsg() {
		return this.get("msg")+"";
	}
	
	
	public Object getData() {
		return this.get("data");
	}
	
	
	public static void writeJson(ServletResponse servletResponse, Result result) {
		servletResponse.setCharacterEncoding("utf-8");
		servletResponse.setContentType("application/json; charset=utf-8");
		PrintWriter writer = null;
		try {
			writer = servletResponse.getWriter();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Gson gson = new GsonBuilder()//建造者模式设置不同的配置
		        .serializeNulls()//序列化为null对象
		        .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期的格式
		        .disableHtmlEscaping()//防止对网址乱码 忽略对特殊字符的转换
		        .create();
		writer.write(gson.toJson(result));
	}

}
